package com.weixiaodong.javabasic.Java中的日期处理方式.使用Java中的LocalDateTime处理;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 从用法上来将LocalDateTime和Date差异性并不是很大，最为关键的一点就是LocalDateTime是不可变的，从源码上查看也可以看到该类使用final修饰的
 * 但是Date却是一个可变类型，从而导致多线程环境下的并发问题
 */
public class LocalDateTimeDemo {
    public static void main(String[] args) {
        /**
         *
         当前时刻：2021-12-19T20:34:33.611
         当前时刻：2021-12-19T20:34:33.611
         当前年份：2021
         当前月份：DECEMBER
         当前日份：19
         当前时：20
         当前分：34
         当前秒：33
         */
        LocalDateTime rightNow = LocalDateTime.now(); // final修饰的类，里面大部分的方法都是static的，即可以直接使用类名调用
        System.out.println("当前时刻：" + rightNow);
        System.out.println("当前时刻：" + rightNow.toString());

        System.out.println("当前年份：" + rightNow.getYear());
        System.out.println("当前月份：" + rightNow.getMonth());
        System.out.println("当前日份：" + rightNow.getDayOfMonth());
        System.out.println("当前时：" + rightNow.getHour());
        System.out.println("当前分：" + rightNow.getMinute());
        System.out.println("当前秒：" + rightNow.getSecond());

        System.out.println();
        System.out.println("使用LocalDateTime构造指定日期");
        LocalDateTime beforeDate = LocalDateTime.of(2019, 7, 23, 19, 8, 11);
        System.out.println(beforeDate); // 2019-07-23T19:08:11

        /**
         * 2021-12-19T20:39:45.133
         * 2019-12-19T20:39:45.133
         * 2021-12-19T20:39:45.133
         * 2021-12-19T19:39:45.133
         */
        System.out.println();
        System.out.println("修改日期");
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now.toString());
        System.out.println(now.minusYears(2)); // 当前时刻减少2年
        System.out.println(now);
        System.out.println(now.minusHours(1)); // 当前时刻减少1小时

        /**
         * 格式化日期
         * 2021-12-19
         * 20211219
         * 2021-12-19
         */
        System.out.println();
        System.out.println("格式化日期");
        LocalDateTime date = LocalDateTime.now();
        String format1 = date.format(DateTimeFormatter.ISO_DATE);
        String format2 = date.format(DateTimeFormatter.BASIC_ISO_DATE);
        String format3 = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

        System.out.println(format1);
        System.out.println(format2);
        System.out.println(format3);


        /**
         * 时间字符串反解析
         * 2002-01-02T11:21
         */
        System.out.println();
        System.out.println("时间字符串反解析");
        // 这里的时间格式于给定的字符串格式需要对齐，否则会抛出异常
        LocalDateTime time = LocalDateTime.parse("2002--01--02 11:21", DateTimeFormatter.ofPattern("yyyy--MM--dd HH:mm"));
        System.out.println(time);
    }
}
















